/**   
 * @Title: NoticeWorkbenchService.java 
 * @Package com.betterjr.modules.notice.service 
 * @Description: TODO(用一句话描述该文件做什么) 
 * @author xuzx
 * @date 2017年11月24日 下午4:01:13  
 */
package com.betterjr.modules.notice.service;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.betterjr.common.utils.BetterStringUtils;
import com.betterjr.modules.notice.entity.NoticeWorkbench;
import com.betterjr.modules.notification.service.NotificationService;

/** 
 * @ClassName: NoticeWorkbenchService 
 * @Description: 工作台首页推送未读消息，未读公告
 * @author xuzx
 * @date 2017年11月24日 下午4:01:13 
 *  
 */
@Service
public class NoticeWorkbenchService {

    @Autowired
    private NoticeService noticeService;

    @Autowired
    private NotificationService notificationService;

    NoticeWorkbench noticeWorkbench = new NoticeWorkbench();

    /**
     * 
     * @Title: queryNotice 
     * @Description: 判断不同情况下工作台显示的未读公告，未读消息 
     * @param anMap 前端参数
     * @return 返回未读公告或消息
     * @throws 
     * @author xuzx
     * @date 2017年11月28日 下午6:09:36
     */
    public NoticeWorkbench queryNotice(final Map<String, Object> anMap) {
        // 未读公告总数
        Long unreadNoticeCount = noticeService.findCountUnreadNotice();
        // 未读消息总数
        Long unreadNotificationCount = notificationService.queryCountUnreadNotification();
        // 无未读公告，无未读消息
        if (unreadNoticeCount.longValue() == 0 && unreadNotificationCount.longValue() == 0) {
            noUnread();
        }
        // 有未读公告，无未读消息
        if (unreadNoticeCount.longValue() != 0 && unreadNotificationCount.longValue() == 0) {
            haveUnreadNotice(anMap, unreadNoticeCount);
        }
        // 无未读公告，有未读消息
        if (unreadNoticeCount.longValue() == 0 && unreadNotificationCount.longValue() != 0) {
            haveUnreadNotification(anMap, unreadNotificationCount);
        }
        // 有未读公告,有未读消息
        if (unreadNoticeCount.longValue() != 0 && unreadNotificationCount.longValue() != 0) {
            haveUnreadNotificationAndNotice(anMap, unreadNoticeCount, unreadNotificationCount);
        }
        return noticeWorkbench;

    }

    /**
     * 
     * @Title: noUnread 
     * @Description: 无未读公告，无未读返回的消息
     * @return 返回工作台信息
     * @throws 
     * @author xuzx
     * @date 2017年11月29日 上午10:25:33
     */
    private NoticeWorkbench noUnread() {
        noticeWorkbench.setNoticeType("00");
        noticeWorkbench.setNoticeCount(0L);
        return noticeWorkbench;
    }

    /**
     * 
     * @Title: haveUnreadNotice 
     * @Description: 有未读公告，无未读返回的信息 
     * @param anMap 前端参数
     * @param unreadNoticeCount 未读公告总数
     * @return 未读公告信息
     * @throws 
     * @author xuzx
     * @date 2017年11月29日 上午10:26:09
     */
    private NoticeWorkbench haveUnreadNotice(Map<String, Object> anMap, Long unreadNoticeCount) {
        // 设置返回的未读公告相关信息
        noticeWorkbench.setNoticeType("01");
        noticeWorkbench.setNoticeCount(unreadNoticeCount);
        noticeWorkbench.setNoticeContent(noticeService.queryUnreadNotice(anMap, 1, 1, 10).get(0));
        noticeWorkbench.setId(noticeService.queryUnreadNotice(anMap, 1, 1, 10).get(0).getId());
        noticeWorkbench.setSubject(noticeService.queryUnreadNotice(anMap, 1, 1, 10).get(0).getSubject());
        return noticeWorkbench;
    }

    /**
     * 
     * @Title: haveUnreadNotification 
     * @Description: 无未读公告，有未读消息返回的信息
     * @param anMap  前端参数
     * @param unreadNotificationCount   未读消息总数
     * @return 未读消息的信息
     * @throws 
     * @author xuzx
     * @date 2017年11月29日 上午10:27:10
     */
    private NoticeWorkbench haveUnreadNotification(Map<String, Object> anMap, Long unreadNotificationCount) {
        // 设置返回的未读消息相关信息
        noticeWorkbench.setNoticeType("02");
        noticeWorkbench.setNoticeCount(unreadNotificationCount);
        noticeWorkbench.setNoticeContent(notificationService.queryUnreadNotification(anMap, 1, 1, 10).get(0));
        noticeWorkbench.setId(notificationService.queryUnreadNotification(anMap, 1, 1, 10).get(0).getId());
        noticeWorkbench.setSubject(notificationService.queryUnreadNotification(anMap, 1, 1, 10).get(0).getSubject());
        return noticeWorkbench;

    }

    /**
     * 
     * @Title: haveUnreadNotificationAndNotice 
     * @Description: 有未读公告,有未读消息返回的信息 
     * @param anMap 前端参数
     * @param unreadNoticeCount 未读公告总数
     * @param unreadNotificationCount 未读消息总数
     * @return 根据条件返回未读公告，或者未读消息
     * @throws 
     * @author xuzx
     * @date 2017年11月29日 上午10:28:13
     */
    private NoticeWorkbench haveUnreadNotificationAndNotice(Map<String, Object> anMap, Long unreadNoticeCount,
            Long unreadNotificationCount) {
        // 未读公告发送时间
        String publishDate = noticeService.queryUnreadNotice(anMap, 1, 1, 10).get(0).getPublishDate();
        // 未读消息发送时间
        String sentDate = notificationService.queryUnreadNotification(anMap, 1, 1, 10).get(0).getSentDate();
        // 判断未读公告发送时间，未读消息发送时间，返回日期最新的消息
        if (BetterStringUtils.toLong(publishDate) > BetterStringUtils.toLong(sentDate)) {
            haveUnreadNotice(anMap, unreadNoticeCount);
        } else {
            haveUnreadNotification(anMap, unreadNotificationCount);
        }
        return noticeWorkbench;
    }
}
